package simple.string;

import java.util.Arrays;

/**
 * @Desc <a href="https://leetcode.cn/problems/ransom-note/">383. 赎金信</a>
 * 给你两个字符串：ransomNote 和 magazine ，判断 ransomNote 能不能由 magazine 里面的字符构成。
 * 如果可以，返回 true ；否则返回 false 。
 * magazine 中的每个字符只能在 ransomNote 中使用一次。
 * 示例 1：
 *   输入：ransomNote = "a", magazine = "b"
 *   输出：false
 * 示例 2：
 *   输入：ransomNote = "aa", magazine = "ab"
 *   输出：false
 * 示例 3：
 *   输入：ransomNote = "aa", magazine = "aab"
 *   输出：true
 * 提示：
 *   1 <= ransomNote.length, magazine.length <= 105
 *   ransomNote 和 magazine 由小写英文字母组成
 * @Date 2023/2/8 1:16
 * @Created by 刘学松
 */
public class 赎金信 {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] arr = new int[26];
        Arrays.fill(arr, -1);
        for (int i = 0; i < ransomNote.length(); i++) {
            char c = ransomNote.charAt(i);
            int index = arr[c - 'a'];
            arr[c - 'a'] = magazine.indexOf(c, index + 1);
            if (arr[c - 'a'] == -1) {
                return false;
            }
        }
        return true;
    }
}
